/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.sigodonto.view.managedbean;

import br.com.sigodonto.model.dao.DaoGenerico;
import br.com.sigodonto.model.dao.ItemEstoqueDao;
import br.com.sigodonto.model.entity.Clinica;
import br.com.sigodonto.model.entity.ItemEstoque;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Fidelis
 */
@ManagedBean
@ViewScoped
public class GerenciarEstoqueMB implements Serializable {

    /**
     * Creates a new instance of GerenciarEstoqueMB
     */
    private ItemEstoque itemEstoque;
    private ItemEstoque itemEstoqueSelecionado;
    private Clinica clinica;
    private List<ItemEstoque> itensEstoqueTodos;
    private List<ItemEstoque> itensEstoqueFiltrados;
    private ItemEstoqueDao itemEstoqueDao;
    private Long quantidadeEntrada;
    private Long quantidadeSaida;

    public GerenciarEstoqueMB() {
        this.itemEstoque = new ItemEstoque();
        this.itemEstoqueDao = new ItemEstoqueDao();
        this.itensEstoqueTodos = this.itemEstoqueDao.listarTodos(ItemEstoque.class);
        this.carregarClinica();
    }

    public List<ItemEstoque> getItensEstoqueFiltrados() {
        return itensEstoqueFiltrados;
    }

    public void setItensEstoqueFiltrados(List<ItemEstoque> itensEstoqueFiltrados) {
        this.itensEstoqueFiltrados = itensEstoqueFiltrados;
    }

    public ItemEstoque getItemEstoque() {
        return itemEstoque;
    }

    public void setItemEstoque(ItemEstoque itemEstoque) {
        this.itemEstoque = itemEstoque;
    }

    public List<ItemEstoque> getItensEstoqueTodos() {
        return itensEstoqueTodos;
    }

    public void setItensEstoqueTodos(List<ItemEstoque> itensEstoqueTodos) {
        this.itensEstoqueTodos = itensEstoqueTodos;
    }

    public ItemEstoque getItemEstoqueSelecionado() {
        return itemEstoqueSelecionado;
    }

    public void setItemEstoqueSelecionado(ItemEstoque itemEstoqueSelecionado) {
        this.itemEstoqueSelecionado = itemEstoqueSelecionado;
    }

    public Long getQuantidadeEntrada() {
        return quantidadeEntrada;
    }

    public void setQuantidadeEntrada(Long quantidadeEntrada) {
        this.quantidadeEntrada = quantidadeEntrada;
    }

    public Long getQuantidadeSaida() {
        return quantidadeSaida;
    }

    public void setQuantidadeSaida(Long quantidadeSaida) {
        this.quantidadeSaida = quantidadeSaida;
    }

    public void salvarItemEstoque() {
        FacesMessage message = new FacesMessage();
        String msg = "ITEM DE ESTOQUE CADASTRADO COM SUCESSO!";
        message.setSeverity(FacesMessage.SEVERITY_INFO);
        boolean certo = false;

        if (this.itemEstoque.getId() == null) {
            if (this.clinica != null) {
                List<ItemEstoque> itensEstoque = this.clinica.getItensEstoque();
                itensEstoque.add(this.itemEstoque);
                this.clinica.setItensEstoque(itensEstoque);
                certo = this.itemEstoqueDao.salvar(this.clinica);
            } else {
                certo = this.itemEstoqueDao.salvar(this.itemEstoque);
            }
        } else {
            ItemEstoque atual = this.itemEstoqueDao.atualizar(this.itemEstoque);
            if(atual != null){
                certo = true;
            }
        }

        if (!certo) {
            msg = "ERRO AO CADASTRAR ITEM DE ESTOQUE!";
            message.setSeverity(FacesMessage.SEVERITY_ERROR);
        } else {
            this.itensEstoqueTodos = this.itemEstoqueDao.listarTodos(ItemEstoque.class);
        }
        this.itemEstoque = new ItemEstoque();

        message.setSummary(msg);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    public void excluirItemEstoque() {
        if (this.itemEstoqueSelecionado != null) {
            String msg = "ITEM DE ESTOQUE REMOVIDO COM SUCESSO!";
            FacesMessage message = new FacesMessage(msg);
            message.setSeverity(FacesMessage.SEVERITY_INFO);



            boolean certo = this.itemEstoqueDao.excluirItemEstoque(this.clinica, this.itemEstoqueSelecionado);

            if (!certo) {
                msg = "ERRO AO REMOVER ITEM DE ESTOQUE!";
                message.setSummary(msg);
                message.setSeverity(FacesMessage.SEVERITY_ERROR);
            } else {
                this.itensEstoqueTodos = this.itemEstoqueDao.listarTodos(ItemEstoque.class);
            }

            FacesContext.getCurrentInstance().addMessage(null, message);

        }
    }

    public void atualizarItemEstoque() {
        if (this.itemEstoqueSelecionado != null) {
            this.itemEstoque = this.itemEstoqueSelecionado;
        }
    }

    public void entradaEstoque() {
        FacesMessage message = new FacesMessage();
        String msg = "SERVIÇO CADASTRADO COM SUCESSO!";
        message.setSeverity(FacesMessage.SEVERITY_INFO);


        Long novaQuantidade = this.itemEstoqueSelecionado.getQuantidade_estoque() + quantidadeEntrada;
        this.itemEstoqueSelecionado.setQuantidade_estoque(novaQuantidade);

        ItemEstoque certo = this.itemEstoqueDao.atualizar(this.itemEstoqueSelecionado);

        if (certo == null) {
            msg = "ERRO AO CADASTRAR SERVIÇO!";
            message.setSeverity(FacesMessage.SEVERITY_ERROR);
        } else {
            this.itensEstoqueTodos = this.itemEstoqueDao.listarTodos(ItemEstoque.class);
            this.quantidadeEntrada = null;
        }

        System.out.println("To aqui caralho!");

        message.setSummary(msg);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    public void saidaEstoque() {
        FacesMessage message = new FacesMessage();
        String msg = "SERVIÇO CADASTRADO COM SUCESSO!";
        message.setSeverity(FacesMessage.SEVERITY_INFO);

        Long novaQuantidade = this.itemEstoqueSelecionado.getQuantidade_estoque() - quantidadeSaida;
        this.itemEstoqueSelecionado.setQuantidade_estoque(novaQuantidade);

        boolean certo = this.itemEstoqueDao.salvar(this.itemEstoqueSelecionado);

        if (!certo) {
            msg = "ERRO AO CADASTRAR SERVIÇO!";
            message.setSeverity(FacesMessage.SEVERITY_ERROR);
        } else {
            this.itensEstoqueTodos = this.itemEstoqueDao.listarTodos(ItemEstoque.class);
            this.quantidadeSaida = null;
        }

        message.setSummary(msg);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    private void carregarClinica() {
        ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
        HttpSession session = (HttpSession) externalContext.getSession(true);
        Clinica clinica1 = (Clinica) session.getAttribute("clinica");
        if (clinica1 != null) {
            this.clinica = clinica1;
        } else {
            this.clinica = new Clinica();
        }
    }
}
